🎖️GitЯра🎖️
examples/simple_sensor/main.cpp HEAD (0679dbef) Text, 4.34 KB
Tff7b72#Tff7b72include T8b949e"SensorMesh.h"
Tff7b72#Tff7b72ifdef DISPLAY_CLASS
Tff7b72#Tff7b72include T8b949e"UITask.h"
Tff7b72static Te6edf3UITask Td2a8ffui_taskTb4b4b4(Te6edf3displayTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72class T56d364MyMesh Tff7b72: Tff7b72public Te6edf3SensorMesh Tb4b4b4{
Tff7b72publicTff7b72:
Te6edf3MyMeshTb4b4b4(Te6edf3meshTff7b72:Tff7b72:Te6edf3MainBoardTff7b72& Te6edf3boardTb4b4b4, Te6edf3meshTff7b72:Tff7b72:Te6edf3RadioTff7b72& Te6edf3radioTb4b4b4, Te6edf3meshTff7b72:Tff7b72:Te6edf3MillisecondClockTff7b72& Te6edf3msTb4b4b4, Te6edf3meshTff7b72:Tff7b72:Te6edf3RNGTff7b72& Te6edf3rngTb4b4b4, Te6edf3meshTff7b72:Tff7b72:Te6edf3RTCClockTff7b72& Te6edf3rtcTb4b4b4, Te6edf3meshTff7b72:Tff7b72:Te6edf3MeshTablesTff7b72& Te6edf3tablesTb4b4b4)
Tff7b72: Te6edf3SensorMeshTb4b4b4(Te6edf3boardTb4b4b4, Te6edf3radioTb4b4b4, Te6edf3msTb4b4b4, Te6edf3rngTb4b4b4, Te6edf3rtcTb4b4b4, Te6edf3tablesTb4b4b4)Tb4b4b4,
Te6edf3battery_dataTb4b4b4(T79c0ff12Tff7b72*T79c0ff24Tb4b4b4, T79c0ff5Tff7b72*T79c0ff60Tb4b4b4) T8b949e// 24 hours worth of battery data, every 5 minutes
Tb4b4b4{
Tb4b4b4}
Tff7b72protectedTff7b72:
T8b949e/* ========================== custom logic here ========================== */
Te6edf3Trigger Te6edf3low_battTb4b4b4, Te6edf3critical_battTb4b4b4;
Te6edf3TimeSeriesData Te6edf3battery_dataTb4b4b4;
Tffa657void Td2a8ffonSensorDataReadTb4b4b4(Tb4b4b4) Tff7b72override Tb4b4b4{
Tffa657float Te6edf3batt_voltage Tff7b72= Te6edf3getVoltageTb4b4b4(Te6edf3TELEM_CHANNEL_SELFTb4b4b4)Tb4b4b4;
Te6edf3battery_dataTb4b4b4.Te6edf3recordDataTb4b4b4(Te6edf3getRTCClockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3batt_voltageTb4b4b4)Tb4b4b4; T8b949e// record battery
Te6edf3alertIfTb4b4b4(Te6edf3batt_voltage Tff7b72< T79c0ff3.4fTb4b4b4, Te6edf3critical_battTb4b4b4, Te6edf3HIGH_PRI_ALERTTb4b4b4, Ta5d6ff"Ta5d6ffBattery is critical!Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3alertIfTb4b4b4(Te6edf3batt_voltage Tff7b72< T79c0ff3.6fTb4b4b4, Te6edf3low_battTb4b4b4, Te6edf3LOW_PRI_ALERTTb4b4b4, Ta5d6ff"Ta5d6ffBattery is lowTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657int Td2a8ffquerySeriesDataTb4b4b4(Tffa657uint32_t Te6edf3start_secs_agoTb4b4b4, Tffa657uint32_t Te6edf3end_secs_agoTb4b4b4, Te6edf3MinMaxAvg Te6edf3destTb4b4b4[Tb4b4b4]Tb4b4b4, Tffa657int Te6edf3max_numTb4b4b4) Tff7b72override Tb4b4b4{
Te6edf3battery_dataTb4b4b4.Te6edf3calcMinMaxAvgTb4b4b4(Te6edf3getRTCClockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3start_secs_agoTb4b4b4, Te6edf3end_secs_agoTb4b4b4, Tff7b72&Te6edf3destTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3TELEM_CHANNEL_SELFTb4b4b4, Te6edf3LPP_VOLTAGETb4b4b4)Tb4b4b4;
Tff7b72return T79c0ff1Tb4b4b4;
Tb4b4b4}
Tffa657bool Td2a8ffhandleCustomCommandTb4b4b4(Tffa657uint32_t Te6edf3sender_timestampTb4b4b4, Tffa657charTff7b72* Te6edf3commandTb4b4b4, Tffa657charTff7b72* Te6edf3replyTb4b4b4) Tff7b72override Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3strcmpTb4b4b4(Te6edf3commandTb4b4b4, Ta5d6ff"Ta5d6ffmagicTa5d6ff"Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{ T8b949e// example 'custom' command handling
Te6edf3strcpyTb4b4b4(Te6edf3replyTb4b4b4, Ta5d6ff"Ta5d6ff**Magic now done**Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4; T8b949e// handled
Tb4b4b4}
Tff7b72return Tffa657falseTb4b4b4; T8b949e// not handled
Tb4b4b4}
T8b949e/* ======================================================================= */
Tb4b4b4}Tb4b4b4;
Te6edf3StdRNG Te6edf3fast_rngTb4b4b4;
Te6edf3SimpleMeshTables Te6edf3tablesTb4b4b4;
Te6edf3MyMesh Td2a8ffthe_meshTb4b4b4(Te6edf3boardTb4b4b4, Te6edf3radio_driverTb4b4b4, Tff7b72*Tff7b72new Te6edf3ArduinoMillisTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3fast_rngTb4b4b4, Te6edf3rtc_clockTb4b4b4, Te6edf3tablesTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffhaltTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72while Tb4b4b4(T79c0ff1Tb4b4b4) Tb4b4b4;
Tb4b4b4}
Tff7b72static Tffa657char Te6edf3commandTb4b4b4[T79c0ff160Tb4b4b4]Tb4b4b4;
Tffa657void Td2a8ffsetupTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3beginTb4b4b4(T79c0ff115200Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff1000Tb4b4b4)Tb4b4b4;
Te6edf3boardTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef HAS_EXTERNAL_WATCHDOG
Te6edf3external_watchdogTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72ifdef DISPLAY_CLASS
Tff7b72if Tb4b4b4(Te6edf3displayTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3displayTb4b4b4.Te6edf3startFrameTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffPlease wait...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3displayTb4b4b4.Te6edf3endFrameTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3radio_initTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3haltTb4b4b4(Tb4b4b4)Tb4b4b4; Tb4b4b4}
Te6edf3fast_rngTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3radio_driverTb4b4b4.Te6edf3getRngSeedTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3FILESYSTEMTff7b72* Te6edf3fsTb4b4b4;
Tff7b72#Tff7b72if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM)
Te6edf3InternalFSTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3fs Tff7b72= Tff7b72&Te6edf3InternalFSTb4b4b4;
Te6edf3IdentityStore Te6edf3storeTb4b4b4(Te6edf3InternalFSTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif defined(ESP32)
Te6edf3SPIFFSTb4b4b4.Te6edf3beginTb4b4b4(Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3fs Tff7b72= Tff7b72&Te6edf3SPIFFSTb4b4b4;
Te6edf3IdentityStore Te6edf3storeTb4b4b4(Te6edf3SPIFFSTb4b4b4, Ta5d6ff"Ta5d6ff/identityTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif defined(RP2040_PLATFORM)
Te6edf3LittleFSTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3fs Tff7b72= Tff7b72&Te6edf3LittleFSTb4b4b4;
Te6edf3IdentityStore Te6edf3storeTb4b4b4(Te6edf3LittleFSTb4b4b4, Ta5d6ff"Ta5d6ff/identityTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3storeTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Tff7b72#Tff7b72error "need to define filesystem"
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3storeTb4b4b4.Te6edf3loadTb4b4b4(Ta5d6ff"Ta5d6ff_mainTa5d6ff"Tb4b4b4, Te6edf3the_meshTb4b4b4.Te6edf3self_idTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3MESH_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffGenerating new keypairTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3the_meshTb4b4b4.Te6edf3self_id Tff7b72= Te6edf3radio_new_identityTb4b4b4(Tb4b4b4)Tb4b4b4; T8b949e// create new random identity
Tffa657int Te6edf3count Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3count Tff7b72< T79c0ff10 Tff7b72&Tff7b72& Tb4b4b4(Te6edf3the_meshTb4b4b4.Te6edf3self_idTb4b4b4.Te6edf3pub_keyTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=Tff7b72= T79c0ff0x00 Tff7b72|Tff7b72| Te6edf3the_meshTb4b4b4.Te6edf3self_idTb4b4b4.Te6edf3pub_keyTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=Tff7b72= T79c0ff0xFFTb4b4b4)Tb4b4b4) Tb4b4b4{ T8b949e// reserved id hashes
Te6edf3the_meshTb4b4b4.Te6edf3self_id Tff7b72= Te6edf3radio_new_identityTb4b4b4(Tb4b4b4)Tb4b4b4; Te6edf3countTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Te6edf3storeTb4b4b4.Te6edf3saveTb4b4b4(Ta5d6ff"Ta5d6ff_mainTa5d6ff"Tb4b4b4, Te6edf3the_meshTb4b4b4.Te6edf3self_idTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ffSensor ID: Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3meshTff7b72:Tff7b72:Te6edf3UtilsTff7b72:Tff7b72:Te6edf3printHexTb4b4b4(Te6edf3SerialTb4b4b4, Te6edf3the_meshTb4b4b4.Te6edf3self_idTb4b4b4.Te6edf3pub_keyTb4b4b4, Te6edf3PUB_KEY_SIZETb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3commandTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3sensorsTb4b4b4.Te6edf3beginTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3the_meshTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3fsTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef DISPLAY_CLASS
Te6edf3ui_taskTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3the_meshTb4b4b4.Te6edf3getNodePrefsTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3FIRMWARE_BUILD_DATETb4b4b4, Te6edf3FIRMWARE_VERSIONTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
T8b949e// send out initial zero hop Advertisement to the mesh
Tff7b72#Tff7b72if ENABLE_ADVERT_ON_BOOT == 1
Te6edf3the_meshTb4b4b4.Te6edf3sendSelfAdvertisementTb4b4b4(T79c0ff16000Tb4b4b4, Tffa657falseTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Tffa657void Td2a8ffloopTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657int Te6edf3len Tff7b72= Te6edf3strlenTb4b4b4(Te6edf3commandTb4b4b4)Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3SerialTb4b4b4.Te6edf3availableTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3len Tff7b72< Tff7b72sizeofTb4b4b4(Te6edf3commandTb4b4b4)T79c0ff-1Tb4b4b4) Tb4b4b4{
Tffa657char Te6edf3c Tff7b72= Te6edf3SerialTb4b4b4.Te6edf3readTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72!Tff7b72= Ta5d6ff'Ta5d6ff\nTa5d6ff'Tb4b4b4) Tb4b4b4{
Te6edf3commandTb4b4b4[Te6edf3lenTff7b72+Tff7b72+Tb4b4b4] Tff7b72= Te6edf3cTb4b4b4;
Te6edf3commandTb4b4b4[Te6edf3lenTb4b4b4] Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Te6edf3cTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3len Tff7b72=Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3commandTb4b4b4)T79c0ff-1Tb4b4b4) Tb4b4b4{ T8b949e// command buffer full
Te6edf3commandTb4b4b4[Tff7b72sizeofTb4b4b4(Te6edf3commandTb4b4b4)T79c0ff-1Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff\rTa5d6ff'Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3len Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Te6edf3commandTb4b4b4[Te6edf3len Tff7b72- T79c0ff1Tb4b4b4] Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff\rTa5d6ff'Tb4b4b4) Tb4b4b4{ T8b949e// received complete line
Te6edf3commandTb4b4b4[Te6edf3len Tff7b72- T79c0ff1Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4; T8b949e// replace newline with C string null terminator
Tffa657char Te6edf3replyTb4b4b4[T79c0ff160Tb4b4b4]Tb4b4b4;
Te6edf3the_meshTb4b4b4.Te6edf3handleCommandTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3commandTb4b4b4, Te6edf3replyTb4b4b4)Tb4b4b4; T8b949e// NOTE: there is no sender_timestamp via serial!
Tff7b72if Tb4b4b4(Te6edf3replyTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3printTb4b4b4(Ta5d6ff"Ta5d6ff -> Ta5d6ff"Tb4b4b4)Tb4b4b4; Te6edf3SerialTb4b4b4.Te6edf3printlnTb4b4b4(Te6edf3replyTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3commandTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= T79c0ff0Tb4b4b4; T8b949e// reset command buffer
Tb4b4b4}
Te6edf3the_meshTb4b4b4.Te6edf3loopTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3sensorsTb4b4b4.Te6edf3loopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef DISPLAY_CLASS
Te6edf3ui_taskTb4b4b4.Te6edf3loopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3rtc_clockTb4b4b4.Te6edf3tickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72ifdef HAS_EXTERNAL_WATCHDOG
Te6edf3external_watchdogTb4b4b4.Te6edf3loopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.1s